// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import merge from 'deepmerge';
import {
    AdminConfig,
    ClusterSettings,
    CollapsedThreads,
    EmailSettings,
    ExperimentalSettings,
    LogSettings,
    PasswordSettings,
    PluginSettings,
    ServiceSettings,
    TeamSettings,
} from '@mattermost/types/config';

import {testConfig} from '@/test_config';

export function getOnPremServerConfig(): AdminConfig {
    return merge<AdminConfig>(defaultServerConfig, onPremServerConfig() as AdminConfig);
}

type TestAdminConfig = {
    ClusterSettings: Partial<ClusterSettings>;
    EmailSettings: Partial<EmailSettings>;
    ExperimentalSettings: Partial<ExperimentalSettings>;
    LogSettings: Partial<LogSettings>;
    PasswordSettings: Partial<PasswordSettings>;
    PluginSettings: Partial<PluginSettings>;
    ServiceSettings: Partial<ServiceSettings>;
    TeamSettings: Partial<TeamSettings>;
};

// On-prem setting that is different from the default
const onPremServerConfig = (): Partial<TestAdminConfig> => {
    return {
        ClusterSettings: {
            Enable: testConfig.haClusterEnabled,
            ClusterName: testConfig.haClusterName,
        },
        EmailSettings: {
            PushNotificationServer: testConfig.pushNotificationServer,
        },
        LogSettings: {
            EnableDiagnostics: false,
        },
        PasswordSettings: {
            MinimumLength: 5,
            Lowercase: false,
            Number: false,
            Uppercase: false,
            Symbol: false,
            EnableForgotLink: true,
        },
        PluginSettings: {
            EnableUploads: true,
            PluginStates: {
                'com.mattermost.calls': {
                    Enable: false,
                },
                'com.mattermost.nps': {
                    Enable: false,
                },
                playbooks: {
                    Enable: true,
                },
            },
        },
        ServiceSettings: {
            SiteURL: testConfig.baseURL,
            EnableOnboardingFlow: false,
            EnableSecurityFixAlert: false,
            GiphySdkKey: 's0glxvzVg9azvPipKxcPLpXV0q1x1fVP',
            EnableTesting: true,
        },
        TeamSettings: {
            EnableOpenServer: true,
            MaxUsersPerTeam: 2000,
        },
    };
};

// Should be based only from the generated default config from ./server via "make config-reset"
// Based on v10.11 server
const defaultServerConfig: AdminConfig = {
    ServiceSettings: {
        SiteURL: '',
        WebsocketURL: '',
        LicenseFileLocation: '',
        ListenAddress: ':8065',
        ConnectionSecurity: '',
        TLSCertFile: '',
        TLSKeyFile: '',
        TLSMinVer: '1.2',
        TLSStrictTransport: false,
        TLSStrictTransportMaxAge: 63072000,
        TLSOverwriteCiphers: [],
        UseLetsEncrypt: false,
        LetsEncryptCertificateCacheFile: './config/letsencrypt.cache',
        Forward80To443: false,
        TrustedProxyIPHeader: [],
        ReadTimeout: 300,
        WriteTimeout: 300,
        IdleTimeout: 60,
        MaximumLoginAttempts: 10,
        GoroutineHealthThreshold: -1,
        EnableOAuthServiceProvider: true,
        EnableIncomingWebhooks: true,
        EnableOutgoingWebhooks: true,
        EnableOutgoingOAuthConnections: false,
        EnableCommands: true,
        OutgoingIntegrationRequestsTimeout: 30,
        EnablePostUsernameOverride: false,
        EnablePostIconOverride: false,
        GoogleDeveloperKey: '',
        EnableLinkPreviews: true,
        EnablePermalinkPreviews: true,
        RestrictLinkPreviews: '',
        EnableTesting: false,
        EnableDeveloper: false,
        DeveloperFlags: '',
        EnableClientPerformanceDebugging: false,
        EnableSecurityFixAlert: true,
        EnableInsecureOutgoingConnections: false,
        AllowedUntrustedInternalConnections: '',
        EnableMultifactorAuthentication: false,
        EnforceMultifactorAuthentication: false,
        EnableUserAccessTokens: false,
        AllowCorsFrom: '',
        CorsExposedHeaders: '',
        CorsAllowCredentials: false,
        CorsDebug: false,
        AllowCookiesForSubdomains: false,
        ExtendSessionLengthWithActivity: true,
        TerminateSessionsOnPasswordChange: true,
        SessionLengthWebInDays: 30,
        SessionLengthWebInHours: 720,
        SessionLengthMobileInDays: 30,
        SessionLengthMobileInHours: 720,
        SessionLengthSSOInDays: 30,
        SessionLengthSSOInHours: 720,
        SessionCacheInMinutes: 10,
        SessionIdleTimeoutInMinutes: 43200,
        WebsocketSecurePort: 443,
        WebsocketPort: 80,
        WebserverMode: 'gzip',
        EnableGifPicker: true,
        GiphySdkKey: '',
        EnableCustomEmoji: true,
        EnableEmojiPicker: true,
        PostEditTimeLimit: -1,
        TimeBetweenUserTypingUpdatesMilliseconds: 5000,
        EnableCrossTeamSearch: true,
        EnablePostSearch: true,
        EnableFileSearch: true,
        MinimumHashtagLength: 3,
        EnableUserTypingMessages: true,
        EnableChannelViewedMessages: true,
        EnableUserStatuses: true,
        ExperimentalEnableAuthenticationTransfer: true,
        ClusterLogTimeoutMilliseconds: 2000,
        EnableTutorial: true,
        EnableOnboardingFlow: true,
        ExperimentalEnableDefaultChannelLeaveJoinMessages: true,
        ExperimentalGroupUnreadChannels: 'disabled',
        EnableAPITeamDeletion: false,
        EnableAPITriggerAdminNotifications: false,
        EnableAPIUserDeletion: false,
        EnableAPIPostDeletion: false,
        EnableDesktopLandingPage: true,
        ExperimentalEnableHardenedMode: false,
        StrictCSRFEnforcement: true,
        EnableEmailInvitations: false,
        DisableBotsWhenOwnerIsDeactivated: true,
        EnableBotAccountCreation: false,
        EnableSVGs: false,
        EnableLatex: false,
        EnableInlineLatex: true,
        PostPriority: true,
        AllowPersistentNotifications: true,
        AllowPersistentNotificationsForGuests: false,
        PersistentNotificationIntervalMinutes: 5,
        PersistentNotificationMaxCount: 6,
        PersistentNotificationMaxRecipients: 5,
        EnableAPIChannelDeletion: false,
        EnableLocalMode: false,
        LocalModeSocketLocation: '/var/tmp/mattermost_local.socket',
        EnableAWSMetering: false,
        SplitKey: '',
        FeatureFlagSyncIntervalSeconds: 30,
        DebugSplit: false,
        ThreadAutoFollow: true,
        CollapsedThreads: CollapsedThreads.ALWAYS_ON,
        ManagedResourcePaths: '',
        EnableCustomGroups: true,
        AllowSyncedDrafts: true,
        UniqueEmojiReactionLimitPerPost: 50,
        RefreshPostStatsRunTime: '00:00',
        MaximumPayloadSizeBytes: 300000,
        MaximumURLLength: 2048,
        ScheduledPosts: true,
        EnableWebHubChannelIteration: false,
        FrameAncestors: '',
        DeleteAccountLink: '',
    },
    TeamSettings: {
        SiteName: 'Mattermost',
        MaxUsersPerTeam: 50,
        EnableJoinLeaveMessageByDefault: true,
        EnableUserCreation: true,
        EnableOpenServer: false,
        EnableUserDeactivation: false,
        RestrictCreationToDomains: '',
        EnableCustomUserStatuses: true,
        EnableCustomBrand: false,
        CustomBrandText: '',
        CustomDescriptionText: '',
        RestrictDirectMessage: 'any',
        EnableLastActiveTime: true,
        UserStatusAwayTimeout: 300,
        MaxChannelsPerTeam: 2000,
        MaxNotificationsPerChannel: 1000,
        EnableConfirmNotificationsToChannel: true,
        TeammateNameDisplay: 'username',
        ExperimentalEnableAutomaticReplies: false,
        LockTeammateNameDisplay: false,
        ExperimentalPrimaryTeam: '',
        ExperimentalDefaultChannels: [],
    },
    ClientRequirements: {
        AndroidLatestVersion: '',
        AndroidMinVersion: '',
        IosLatestVersion: '',
        IosMinVersion: '',
    },
    SqlSettings: {
        DriverName: 'postgres',
        DataSource:
            'postgres://mmuser:mostest@localhost/mattermost_test?sslmode=disable\u0026connect_timeout=10\u0026binary_parameters=yes',
        DataSourceReplicas: [],
        DataSourceSearchReplicas: [],
        MaxIdleConns: 50,
        ConnMaxLifetimeMilliseconds: 3600000,
        ConnMaxIdleTimeMilliseconds: 300000,
        MaxOpenConns: 100,
        Trace: false,
        AtRestEncryptKey: '',
        QueryTimeout: 30,
        DisableDatabaseSearch: false,
        MigrationsStatementTimeoutSeconds: 100000,
        ReplicaLagSettings: [],
        ReplicaMonitorIntervalSeconds: 5,
    },
    LogSettings: {
        EnableConsole: true,
        ConsoleLevel: 'DEBUG',
        ConsoleJson: true,
        EnableColor: false,
        EnableFile: true,
        FileLevel: 'INFO',
        FileJson: true,
        FileLocation: '',
        EnableWebhookDebugging: true,
        EnableDiagnostics: true,
        EnableSentry: true,
        AdvancedLoggingJSON: {},
        MaxFieldSize: 2048,
    },
    ExperimentalAuditSettings: {
        FileEnabled: false,
        FileName: '',
        FileMaxSizeMB: 100,
        FileMaxAgeDays: 0,
        FileMaxBackups: 0,
        FileCompress: false,
        FileMaxQueueSize: 1000,
        AdvancedLoggingJSON: {},
        Certificate: '',
    },
    PasswordSettings: {
        MinimumLength: 8,
        Lowercase: false,
        Number: false,
        Uppercase: false,
        Symbol: false,
        EnableForgotLink: true,
    },
    FileSettings: {
        EnableFileAttachments: true,
        EnableMobileUpload: true,
        EnableMobileDownload: true,
        MaxFileSize: 104857600,
        MaxImageResolution: 33177600,
        MaxImageDecoderConcurrency: -1,
        DriverName: 'local',
        Directory: './data/',
        EnablePublicLink: false,
        ExtractContent: true,
        ArchiveRecursion: false,
        PublicLinkSalt: '',
        InitialFont: 'nunito-bold.ttf',
        AmazonS3AccessKeyId: '',
        AmazonS3SecretAccessKey: '',
        AmazonS3Bucket: '',
        AmazonS3PathPrefix: '',
        AmazonS3Region: '',
        AmazonS3Endpoint: 's3.amazonaws.com',
        AmazonS3SSL: true,
        AmazonS3SignV2: false,
        AmazonS3SSE: false,
        AmazonS3Trace: false,
        AmazonS3RequestTimeoutMilliseconds: 30000,
        AmazonS3UploadPartSizeBytes: 5242880,
        AmazonS3StorageClass: '',
        DedicatedExportStore: false,
        ExportDriverName: 'local',
        ExportDirectory: './data/',
        ExportAmazonS3AccessKeyId: '',
        ExportAmazonS3SecretAccessKey: '',
        ExportAmazonS3Bucket: '',
        ExportAmazonS3PathPrefix: '',
        ExportAmazonS3Region: '',
        ExportAmazonS3Endpoint: 's3.amazonaws.com',
        ExportAmazonS3SSL: true,
        ExportAmazonS3SignV2: false,
        ExportAmazonS3SSE: false,
        ExportAmazonS3Trace: false,
        ExportAmazonS3RequestTimeoutMilliseconds: 30000,
        ExportAmazonS3PresignExpiresSeconds: 21600,
        ExportAmazonS3UploadPartSizeBytes: 104857600,
        ExportAmazonS3StorageClass: '',
    },
    EmailSettings: {
        EnableSignUpWithEmail: true,
        EnableSignInWithEmail: true,
        EnableSignInWithUsername: true,
        SendEmailNotifications: true,
        UseChannelInEmailNotifications: false,
        RequireEmailVerification: false,
        FeedbackName: '',
        FeedbackEmail: 'test@example.com',
        ReplyToAddress: 'test@example.com',
        FeedbackOrganization: '',
        EnableSMTPAuth: false,
        SMTPUsername: '',
        SMTPPassword: '',
        SMTPServer: 'localhost',
        SMTPPort: '10025',
        SMTPServerTimeout: 10,
        ConnectionSecurity: '',
        SendPushNotifications: true,
        PushNotificationServer: 'https://push-test.mattermost.com',
        PushNotificationServerType: 'custom',
        PushNotificationServerLocation: 'us',
        PushNotificationContents: 'full',
        PushNotificationBuffer: 1000,
        EnableEmailBatching: false,
        EmailBatchingBufferSize: 256,
        EmailBatchingInterval: 30,
        EnablePreviewModeBanner: true,
        SkipServerCertificateVerification: false,
        EmailNotificationContentsType: 'full',
        LoginButtonColor: '#0000',
        LoginButtonBorderColor: '#2389D7',
        LoginButtonTextColor: '#2389D7',
    },
    RateLimitSettings: {
        Enable: false,
        PerSec: 10,
        MaxBurst: 100,
        MemoryStoreSize: 10000,
        VaryByRemoteAddr: true,
        VaryByUser: false,
        VaryByHeader: '',
    },
    PrivacySettings: {
        ShowEmailAddress: true,
        ShowFullName: true,
    },
    SupportSettings: {
        TermsOfServiceLink: 'https://mattermost.com/pl/terms-of-use/',
        PrivacyPolicyLink: 'https://mattermost.com/pl/privacy-policy/',
        AboutLink: 'https://mattermost.com/pl/about-mattermost',
        HelpLink: 'https://mattermost.com/pl/help/',
        ReportAProblemLink: 'https://mattermost.com/pl/report-a-bug',
        ReportAProblemType: 'default',
        ReportAProblemMail: '',
        AllowDownloadLogs: true,
        ForgotPasswordLink: '',
        SupportEmail: '',
        CustomTermsOfServiceEnabled: false,
        CustomTermsOfServiceReAcceptancePeriod: 365,
        EnableAskCommunityLink: true,
    },
    AnnouncementSettings: {
        EnableBanner: false,
        BannerText: '',
        BannerColor: '#f2a93b',
        BannerTextColor: '#333333',
        AllowBannerDismissal: true,
        AdminNoticesEnabled: true,
        UserNoticesEnabled: true,
        NoticesURL: 'https://notices.mattermost.com/',
        NoticesFetchFrequency: 3600,
        NoticesSkipCache: false,
    },
    ThemeSettings: {
        EnableThemeSelection: true,
        DefaultTheme: 'default',
        AllowCustomThemes: true,
        AllowedThemes: [],
    },
    GitLabSettings: {
        Enable: false,
        Secret: '',
        Id: '',
        Scope: '',
        AuthEndpoint: '',
        TokenEndpoint: '',
        UserAPIEndpoint: '',
        DiscoveryEndpoint: '',
        ButtonText: '',
        ButtonColor: '',
    },
    GoogleSettings: {
        Enable: false,
        Secret: '',
        Id: '',
        Scope: 'profile email',
        AuthEndpoint: 'https://accounts.google.com/o/oauth2/v2/auth',
        TokenEndpoint: 'https://www.googleapis.com/oauth2/v4/token',
        UserAPIEndpoint:
            'https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses,nicknames,metadata',
        DiscoveryEndpoint: '',
        ButtonText: '',
        ButtonColor: '',
    },
    Office365Settings: {
        Enable: false,
        Secret: '',
        Id: '',
        Scope: 'User.Read',
        AuthEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
        TokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
        UserAPIEndpoint: 'https://graph.microsoft.com/v1.0/me',
        DiscoveryEndpoint: '',
        DirectoryId: '',
    },
    OpenIdSettings: {
        Enable: false,
        Secret: '',
        Id: '',
        Scope: 'profile openid email',
        AuthEndpoint: '',
        TokenEndpoint: '',
        UserAPIEndpoint: '',
        DiscoveryEndpoint: '',
        ButtonText: '',
        ButtonColor: '#145DBF',
    },
    LdapSettings: {
        Enable: false,
        EnableSync: false,
        LdapServer: '',
        LdapPort: 389,
        ConnectionSecurity: '',
        BaseDN: '',
        BindUsername: '',
        BindPassword: '',
        MaximumLoginAttempts: 10,
        UserFilter: '',
        GroupFilter: '',
        GuestFilter: '',
        EnableAdminFilter: false,
        AdminFilter: '',
        GroupDisplayNameAttribute: '',
        GroupIdAttribute: '',
        FirstNameAttribute: '',
        LastNameAttribute: '',
        EmailAttribute: '',
        UsernameAttribute: '',
        NicknameAttribute: '',
        IdAttribute: '',
        PositionAttribute: '',
        LoginIdAttribute: '',
        PictureAttribute: '',
        SyncIntervalMinutes: 60,
        ReAddRemovedMembers: false,
        SkipCertificateVerification: false,
        PublicCertificateFile: '',
        PrivateKeyFile: '',
        QueryTimeout: 60,
        MaxPageSize: 0,
        LoginFieldName: '',
        LoginButtonColor: '#0000',
        LoginButtonBorderColor: '#2389D7',
        LoginButtonTextColor: '#2389D7',
    },
    ComplianceSettings: {
        Enable: false,
        Directory: './data/',
        EnableDaily: false,
        BatchSize: 30000,
    },
    LocalizationSettings: {
        DefaultServerLocale: 'en',
        DefaultClientLocale: 'en',
        AvailableLocales: '',
        EnableExperimentalLocales: false,
    },
    SamlSettings: {
        Enable: false,
        EnableSyncWithLdap: false,
        EnableSyncWithLdapIncludeAuth: false,
        IgnoreGuestsLdapSync: false,
        Verify: true,
        Encrypt: true,
        SignRequest: false,
        IdpURL: '',
        IdpDescriptorURL: '',
        IdpMetadataURL: '',
        ServiceProviderIdentifier: '',
        AssertionConsumerServiceURL: '',
        SignatureAlgorithm: 'RSAwithSHA256',
        CanonicalAlgorithm: 'Canonical1.0',
        ScopingIDPProviderId: '',
        ScopingIDPName: '',
        IdpCertificateFile: '',
        PublicCertificateFile: '',
        PrivateKeyFile: '',
        IdAttribute: '',
        GuestAttribute: '',
        EnableAdminAttribute: false,
        AdminAttribute: '',
        FirstNameAttribute: '',
        LastNameAttribute: '',
        EmailAttribute: '',
        UsernameAttribute: '',
        NicknameAttribute: '',
        LocaleAttribute: '',
        PositionAttribute: '',
        LoginButtonText: 'SAML',
        LoginButtonColor: '#34a28b',
        LoginButtonBorderColor: '#2389D7',
        LoginButtonTextColor: '#ffffff',
    },
    NativeAppSettings: {
        AppCustomURLSchemes: ['mmauth://', 'mmauthbeta://'],
        AppDownloadLink: 'https://mattermost.com/pl/download-apps',
        AndroidAppDownloadLink: 'https://mattermost.com/pl/android-app/',
        IosAppDownloadLink: 'https://mattermost.com/pl/ios-app/',
        MobileExternalBrowser: false,
        MobileEnableBiometrics: false,
        MobilePreventScreenCapture: false,
        MobileJailbreakProtection: false,
        MobileEnableSecureFilePreview: false,
        MobileAllowPdfLinkNavigation: false,
    },
    CacheSettings: {
        CacheType: 'lru',
        RedisAddress: '',
        RedisPassword: '',
        RedisDB: -1,
        RedisCachePrefix: '',
        DisableClientCache: false,
    },
    ClusterSettings: {
        Enable: false,
        ClusterName: '',
        OverrideHostname: '',
        NetworkInterface: '',
        BindAddress: '',
        AdvertiseAddress: '',
        UseIPAddress: true,
        EnableGossipCompression: true,
        EnableGossipEncryption: true,
        ReadOnlyConfig: true,
        GossipPort: 8074,
    },
    MetricsSettings: {
        Enable: false,
        BlockProfileRate: 0,
        ListenAddress: ':8067',
        EnableClientMetrics: true,
        EnableNotificationMetrics: true,
        ClientSideUserIds: [],
    },
    ExperimentalSettings: {
        LinkMetadataTimeoutMilliseconds: 5000,
        RestrictSystemAdmin: false,
        EnableSharedChannels: false,
        EnableRemoteClusterService: false,
        DisableAppBar: false,
        DisableRefetchingOnBrowserFocus: false,
        DelayChannelAutocomplete: false,
        DisableWakeUpReconnectHandler: false,
        UsersStatusAndProfileFetchingPollIntervalMilliseconds: 3000,
        YoutubeReferrerPolicy: false,
        ExperimentalChannelCategorySorting: false,
    },
    AnalyticsSettings: {
        MaxUsersForStatistics: 2500,
    },
    ElasticsearchSettings: {
        ConnectionURL: 'http://localhost:9200',
        Backend: 'elasticsearch',
        Username: 'elastic',
        Password: 'changeme',
        EnableIndexing: false,
        EnableSearching: false,
        EnableAutocomplete: false,
        Sniff: true,
        PostIndexReplicas: 1,
        PostIndexShards: 1,
        ChannelIndexReplicas: 1,
        ChannelIndexShards: 1,
        UserIndexReplicas: 1,
        UserIndexShards: 1,
        AggregatePostsAfterDays: 365,
        PostsAggregatorJobStartTime: '03:00',
        IndexPrefix: '',
        GlobalSearchPrefix: '',
        LiveIndexingBatchSize: 10,
        BatchSize: 10000,
        RequestTimeoutSeconds: 30,
        SkipTLSVerification: false,
        CA: '',
        ClientCert: '',
        ClientKey: '',
        Trace: '',
        IgnoredPurgeIndexes: '',
    },
    DataRetentionSettings: {
        EnableMessageDeletion: false,
        EnableFileDeletion: false,
        EnableBoardsDeletion: false,
        MessageRetentionDays: 365,
        MessageRetentionHours: 0,
        FileRetentionDays: 365,
        FileRetentionHours: 0,
        BoardsRetentionDays: 365,
        DeletionJobStartTime: '02:00',
        BatchSize: 3000,
        TimeBetweenBatchesMilliseconds: 100,
        RetentionIdsBatchSize: 100,
        PreservePinnedPosts: false,
    },
    MessageExportSettings: {
        EnableExport: false,
        ExportFormat: 'actiance',
        DailyRunTime: '01:00',
        ExportFromTimestamp: 0,
        BatchSize: 10000,
        DownloadExportResults: false,
        ChannelBatchSize: 100,
        ChannelHistoryBatchSize: 10,
        GlobalRelaySettings: {
            CustomerType: 'A9',
            SMTPUsername: '',
            SMTPPassword: '',
            EmailAddress: '',
            SMTPServerTimeout: 1800,
            CustomSMTPServerName: '',
            CustomSMTPPort: '25',
        },
    },
    JobSettings: {
        RunJobs: true,
        RunScheduler: true,
        CleanupJobsThresholdDays: -1,
        CleanupConfigThresholdDays: -1,
    },
    PluginSettings: {
        Enable: true,
        EnableUploads: false,
        AllowInsecureDownloadURL: false,
        EnableHealthCheck: true,
        Directory: './plugins',
        ClientDirectory: './client/plugins',
        Plugins: {},
        PluginStates: {
            'com.mattermost.calls': {
                Enable: true,
            },
            'com.mattermost.nps': {
                Enable: true,
            },
            'mattermost-ai': {
                Enable: true,
            },
            playbooks: {
                Enable: true,
            },
        },
        EnableMarketplace: true,
        EnableRemoteMarketplace: true,
        AutomaticPrepackagedPlugins: true,
        RequirePluginSignature: false,
        MarketplaceURL: 'https://api.integrations.mattermost.com',
        SignaturePublicKeyFiles: [],
        ChimeraOAuthProxyURL: '',
    },
    DisplaySettings: {
        CustomURLSchemes: [],
        MaxMarkdownNodes: 0,
    },
    GuestAccountsSettings: {
        Enable: false,
        HideTags: false,
        AllowEmailAccounts: true,
        EnforceMultifactorAuthentication: false,
        RestrictCreationToDomains: '',
    },
    ImageProxySettings: {
        Enable: false,
        ImageProxyType: 'local',
        RemoteImageProxyURL: '',
        RemoteImageProxyOptions: '',
    },
    CloudSettings: {
        CWSURL: 'https://customers.mattermost.com',
        CWSAPIURL: 'https://portal.internal.prod.cloud.mattermost.com',
        CWSMock: false,
        Disable: false,
        PreviewModalBucketURL: '',
    },
    FeatureFlags: {
        TestFeature: 'off',
        TestBoolFeature: false,
        EnableRemoteClusterService: false,
        EnableSharedChannelsDMs: false,
        EnableSharedChannelsPlugins: true,
        EnableSharedChannelsMemberSync: false,
        EnableSyncAllUsersForRemoteCluster: false,
        AppsEnabled: false,
        PermalinkPreviews: false,
        NormalizeLdapDNs: false,
        WysiwygEditor: false,
        OnboardingTourTips: true,
        DeprecateCloudFree: false,
        EnableExportDirectDownload: false,
        MoveThreadsEnabled: false,
        StreamlinedMarketplace: true,
        CloudIPFiltering: false,
        ConsumePostHook: false,
        CloudAnnualRenewals: false,
        CloudDedicatedExportUI: false,
        ChannelBookmarks: true,
        WebSocketEventScope: true,
        NotificationMonitoring: true,
        ExperimentalAuditSettingsSystemConsoleUI: true,
        CustomProfileAttributes: true,
        AttributeBasedAccessControl: true,
        ContentFlagging: false,
        InteractiveDialogAppsForm: true,
        ChannelAdminManageABACRules: false,
    },
    ImportSettings: {
        Directory: './import',
        RetentionDays: 30,
    },
    ExportSettings: {
        Directory: './export',
        RetentionDays: 30,
    },
    WranglerSettings: {
        PermittedWranglerRoles: [],
        AllowedEmailDomain: [],
        MoveThreadMaxCount: 100,
        MoveThreadToAnotherTeamEnable: false,
        MoveThreadFromPrivateChannelEnable: false,
        MoveThreadFromDirectMessageChannelEnable: false,
        MoveThreadFromGroupMessageChannelEnable: false,
    },
    ConnectedWorkspacesSettings: {
        EnableSharedChannels: false,
        EnableRemoteClusterService: false,
        DisableSharedChannelsStatusSync: false,
        SyncUsersOnConnectionOpen: false,
        GlobalUserSyncBatchSize: 25,
        MaxPostsPerSync: 50,
        MemberSyncBatchSize: 20,
    },
    AccessControlSettings: {
        EnableAttributeBasedAccessControl: false,
        EnableChannelScopeAccessControl: false,
        EnableUserManagedAttributes: false,
    },
    ContentFlaggingSettings: {
        EnableContentFlagging: false,
        ReviewerSettings: {
            CommonReviewers: true,
            CommonReviewerIds: [],
            TeamReviewersSetting: {},
            SystemAdminsAsReviewers: false,
            TeamAdminsAsReviewers: true,
        },
        NotificationSettings: {
            EventTargetMapping: {
                assigned: ['reviewers'],
                dismissed: ['reviewers', 'reporter'],
                flagged: ['reviewers'],
                removed: ['reviewers', 'author', 'reporter'],
            },
        },
        AdditionalSettings: {
            Reasons: [
                'Inappropriate content',
                'Sensitive data',
                'Security concern',
                'Harassment or abuse',
                'Spam or phishing',
            ],
            ReporterCommentRequired: true,
            ReviewerCommentRequired: true,
            HideFlaggedContent: true,
        },
    },
};
